草庐IT

Java final 与 C++ const

全部标签

c++ - 通过从 const 函数引用调用另一个类的非常量函数

这个问题在这里已经有了答案:WhycanIcallanon-constmemberfunctionpointerfromaconstmethod?(5个答案)关闭3年前。想象一下下面的例子:classA{public:voiddoSomeStuff(){std::cout如果doSomeStuff()会更改数据,那不会也影响classB吗?为什么允许这种行为?

c++ - 使用 const_cast<> 时未定义的行为在哪里?

如果我这样做:constchar*const_str="Somestring";char*str=const_cast(const_str);//(1)str[0]="P";//(2)未定义的行为到底在哪里(哪一行)?我一直在SO上搜索很多,但没有找到任何明确和准确的答案(或者至少,我无法理解)。另外相关:如果我使用提供这种功能的外部库://Thedocumentationstatesthatstrwillneverbemodified,justread.voidread_string(char*str);是否可以这样写:std::stringstr="Mystring";read_s

c++ - 在引用 (T&) 和常量指针 (T* const) 之间进行选择

是否有任何合理的用例,其中应该使用const指针指向引用?Tobj;T&r=obj;//style-1T*constp=&obj;//style-2这两种样式可以用于相同的目的。我总是喜欢代码中的第一种样式,并将后一种样式视为已弃用。但是我仍然想知道是否错过了第二种风格更好的用例?编辑:不局限于上面的例子,我讲的是广义的,voidfoo(T&r);//style-1voidfoo(T*constp);//style-2[我从几个答案中看出,style-2允许传递null。] 最佳答案 const指针(T*const)可以是NULL,

c++ - 不是最重要的 const.. 但这是什么?

这输出F~但我期待的是~F#includestructFoo{int_x;operatorconstint&()const{return_x;}~Foo(){std::cout我将其构建为一个反例,以表明最重要的常量是异常(exception)而非规则。一般写成whenaconstreferencebindstoatemporary,thenthelifetimeofthattemporaryisextendedtothelifetimeofthereference我试图说明,虽然Foo()是临时的,但转换运算符返回的对_x的引用不是,上面的代码是不安全。但输出似乎证明该示例是安全的,

c++ - 仅 header 文件中的静态 const 整数类成员 - 正确的方法?

假设我有以下示例:#includeclassA{public:staticconststd::size_tvalue=42;};简而言之,我有(或者更好的是,想要)一个类A和一个名为value的staticconststd::size_t成员值42(在编译时确定)。现在,IIRC,这只在特定情况下才能正常工作。例如,当您获取A::value的地址时,它不会。为了使其在所有情况下都能正常工作,您需要在一些实现文件中添加一个定义:conststd::size_tA::value;但是,我不能这样做,因为我希望这个文件是header-only。另一个常见的解决方案是:classA{publi

c++ - 如何编写指针和数据为 const 的 unique_ptr

我第一次尝试编写一个基于范围的for循环来遍历unique_ptr时,我写道:std::vector>vec;//Initializevecfor(autov:vec)//error{}然后我意识到这是在尝试创建每个元素的拷贝,这对unique_ptr没有意义。所以后来我写了它作为引用:for(auto&v:vec){}在它前面添加一个const可以防止我更改指针。for(constauto&v:vec){v=nullptr;//error(good!)}要怎么写,才能让指向的数据不能改变?例如,以下代码不应编译。for(???v:vec){v->func();}classFoo{pu

c++ - 用 const char*const 解释 constexpr

这个问题在这里已经有了答案:What'sthedifferencebetweenconstexprandconst?(10个答案)关闭7年前。我有以下代码:staticconstexprconstchar*constmyString="myString";能否请您解释一下与以下内容的区别:staticconstchar*constmyString="myString";在这种情况下,constexpr有什么新内容?

c++ - 了解此 `const&` 特化的必要性

在指南支持库中有一个名为final_action的类(本质上就是众所周知的ScopeGuard)。有2个独立的便利函数可以生成这个模板类://finally()-conveniencefunctiontogenerateafinal_actiontemplateinlinefinal_actionfinally(constF&f)noexcept{returnfinal_action(f);}templateinlinefinal_actionfinally(F&&f)noexcept{returnfinal_action(std::forward(f));}(来源:https://g

c++ - const重载而不必写两次函数

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Elegantsolutiontoduplicate,constandnon-const,getters?假设我有一个带有成员函数的C++类,它为const重载,如下所示:Type*DoSomething();constType*DoSomething()const;如果这是一个更大、更复杂的成员,如何避免必须两次编写相同的代码?不能从常量函数调用任何非常量函数。从非const调用const版本会导致const指针必须转换为非const(imo有点味道)。

c++ - 成员函数什么时候应该有 const 限定符,什么时候不应该?

大约六年前,一位名叫HarriPorten的软件工程师写道thisarticle,问这个问题,“成员函数什么时候应该有const限定符,什么时候不应该?”我发现这是我能找到的关于这个问题的最好的文章,我最近一直在努力解决这个问题,我认为在我发现的关于const正确性的大多数讨论中都没有很好地涵盖这个问题。由于当时还没有像SO这样强大的软件信息共享站点,所以我想在这里重新提出这个问题。 最佳答案 这篇文章似乎涵盖了很多基础知识,但作者仍然对返回指针的函数的const和non-const重载有疑问。文章的最后一行是:许多人可能会回答“视